const express = require('express')
// 引入 path 核心模块，用于处理路径
const path = require('path')
// 引入 formidable 包，用于处理文件上传
const formidable = require('formidable')

// 将数据库处理时的用户 Model 引入
const { User } = require('../utils/db')
// 消息处理
const { success, error } = require('../utils/response')
const router = express.Router()

// 查询人员信息
router.get('/:_id?', (req, res, next) => {
  // 获取动态路径参数值
  const { _id } = req.params

  if (_id) { // 查询具体某一个人员信息
    User.findById(_id)
      .then(data => {
        res.json(success(data._doc))
      })
      .catch(err => {
        res.json(error(5, err.message))
      })
  } else {
    // 从 GET 请求的查询字符串参数中获取数据
    const { page = 1, pageSize = 5 } = req.query
    // 查询
    User.find()
      .limit(+pageSize)
      .skip((page - 1) * pageSize)
      .then(data => {
        res.json(success({
          list: data
        }))
      })
      .catch(err => {
        res.json(error(4, err.message))
      })
    }
})
// router.get('/', (req, res) => {
//   res.send(`
//     <h2>With <code>"express"</code> npm package</h2>
//     <form action="/api/v1/users" enctype="multipart/form-data" method="post">
//       <div>Text field title: <input type="text" name="name" /></div>
//       <div>Text field title: <input type="text" name="sex" /></div>
//       <div>Text field title: <input type="text" name="birthday" /></div>
//       <div>Text field title: <input type="text" name="cid" /></div>
//       <div>Text field title: <input type="text" name="phone" /></div>
//       <div>File: <input type="file" name="photo" multiple="multiple" /></div>
//       <input type="submit" value="Upload" />
//     </form>
//   `);
// });

// 创建添加人员信息
// 接收上传的图片数据
router.post('/', (req, res, next) => {
  // 配置
  const form = formidable({
    multiples: true,
    uploadDir: path.resolve(__dirname, '../public/images'), // 保存文件的目录
    keepExtensions: true // 保留文件后缀名
  })
  // 解析
  form.parse(req, (err, fields, files) => {
    if (err) {
      res.json(error(6, err.message))
      return
    }

    // 从 fields 中获取请求中的文本参数
    const { name, birthday, cid, phone, sex } = fields
    // 获取请求中的文件数据信息
    const filepath = files.photo.path
    const photo = '/images/' + filepath.slice(filepath.lastIndexOf('\\') + 1)
    // 创建 User(人员) 的 Model 对象实例
    const user = new User({
      name,
      sex,
      birthday,
      cid,
      phone,
      photo
    })
    // 保存到数据库中
    user.save()
      .then(data => { // 保存成功
        res.json(success(data._doc))
      })
      .catch(err => { // 保存失败，错误码为1，表示保存人员信息出错
        res.json(error(1, err.message))
      })
  })
})

// 仅接收文本数据
// router.post('/', (req, res, next) => {
//   // 从 POST 请求的主体中获取请求参数
//   const { name, birthday, cid, phone, sex } = req.body
//   // 创建 User(人员) 的 Model 对象实例
//   const user = new User({
//     name,
//     sex,
//     birthday,
//     cid,
//     phone
//   })
//   // 保存到数据库中
//   user.save()
//     .then(data => { // 保存成功
//       res.json(success(data._doc))
//     })
//     .catch(err => { // 保存失败，错误码为1，表示保存人员信息出错
//       res.json(error(1, err.message))
//     })
// })

// 修改人员信息
router.put('/', (req, res, next) => {
  // 从请求主体中获取请求参数
  const { _id, name, birthday, cid, phone, sex } = req.body
  // 调用 User 对应 Model 下的 update() 方法实现修改
  User.update(
    {_id},
    {
      name,
      birthday,
      sex,
      cid,
      phone
    }
  )
  .then(data => res.json(success({
    success: true
  }))) // 成功
  .catch(err => res.json(error(2, err.message))) // 失败
})

// 删除人员信息
router.delete('/:_id', (req, res, next) => {
  // 获取待删除人员的主键 _id 值
  const { _id } = req.params
  // 实现删除
  User.remove({ _id })
    .then(data => {
      res.json(success({
        success: true,
        data
      }))
    })
    .catch(err => {
      res.json(error(3, err.message))
    })
})

module.exports = router
